import crypto from 'node:crypto'
import express from 'express'

const router = express.Router() //路由模块
/* 对称加密 */
router.get('/hex', (req, res) => {
  // 生成一个随机的 16 字节的初始化向量 (IV)
  const iv = Buffer.from(crypto.randomBytes(16))

  // 生成一个随机的 32 字节的密钥
  const key = crypto.randomBytes(32)

  console.log('iv', iv)
  console.log('key', key)
  // 创建加密实例，使用 AES-256-CBC 算法，提供密钥和初始化向量
  const cipher = crypto.createCipheriv('aes-256-cbc', key, iv)

  // 对输入数据进行加密，并输出加密结果的十六进制表示
  cipher.update('code amazing', 'utf-8', 'hex')
  const result = cipher.final('hex')

  // 解密
  const de = crypto.createDecipheriv('aes-256-cbc', key, iv)
  de.update(result, 'hex')
  const decrypted = de.final('utf-8')

  console.log('Decrypted:', decrypted)

  res.send({
    result: result,
    decrypted: decrypted,
  })
})
/* 非对称加密 */
router.get('/rsa', (req, res) => {
  // 生成 RSA 密钥对
  const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 2048,
  })
  // 要加密的数据
  const text = 'good good study, day day up '

  // 使用公钥进行加密
  const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(text, 'utf-8'))

  // 使用私钥进行解密
  const decrypted = crypto.privateDecrypt(privateKey, encrypted)

  console.log(decrypted.toString())

  res.send({
    publicKey,
    privateKey,
    encrypted,
  })
})

router.get('/createHash', (req, res) => {
  // 要计算哈希的数据
  let text = 'health important'

  // 创建哈希对象，并使用 MD5 算法
  const hash = crypto.createHash('md5')

  // 更新哈希对象的数据
  hash.update(text)

  // 计算哈希值，并以十六进制字符串形式输出
  const hashValue = hash.digest('hex')

  console.log('Text:', text)
  console.log('Hash:', hashValue)

  res.send({
    hashValue,
  })
})

export default router
